package top.leinx.fxnotes.properties;

/**
 * @Author : xiaolei
 * @DateTime: 2021/3/12 1:36 下午
 */

import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ReadOnlyDoubleProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class PropertyExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Pane pane = new Pane();

        ReadOnlyDoubleProperty widthProperty = pane.widthProperty();
        // 使用匿名内部类实现监听，改变窗口宽度时监听器工作
        widthProperty.addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue) {
                System.out.printf("width 从 %.2f 变为 %.2f\n", oldValue, newValue);
            }
        });

        DoubleProperty prefWidthProperty = pane.prefWidthProperty();
        // 使用lambda表达式实现监听
        prefWidthProperty.addListener(((observableValue, oldValue, newValue) -> {
            System.out.printf("prefWidth 从 %.2f 变为 %.2f\n", oldValue, newValue);
        }));

        prefWidthProperty.set(200.0);  //修改属性值，触发对该属性的监听
        //pane.setPrefWidth(200.0);    //使用set方法修改也可以触发

        Scene scene = new Scene(pane, 1024, 800, true); // pane的宽度变化，触发对该属性的监听
        primaryStage.setScene(scene);
        primaryStage.setTitle("属性使用示例");

        primaryStage.show();
    }
}
